// 从扑克牌中随机抽5张牌，判断是不是一个顺子，即这5张牌是不是连续的。
// 扑克牌数字包含1 - 13，而大、小王为 0 ，可以看成任意数字。
// 判断随机的五张牌是否能组成连续的顺子。

function isStraight(nums: number[]): boolean {
    let maxNum: number = -Infinity;// 扑克牌最大值
    let minNum: number = Infinity;// 扑克牌最小值
    let hashSet = new Set();// 声明哈希集
    for (let num of nums) {
        if (num === 0) continue;// 大小王不影响
        if (hashSet.has(num)) return false;// 若出现重复则肯定不满足顺子
        hashSet.add(num);
        // 维护最大最小值
        maxNum = Math.max(maxNum, num);
        minNum = Math.min(minNum, num);
    }
    // 判断最大最小值的差是否满足题意
    return maxNum - minNum < 5 ? true : false;
};

// 这道题直白来说难度其实比较小了
// 最关键的是要想到两个地方：
// 1、除大小王外，所有牌 无重复 ；
// 2、设此 5 张牌中最大的牌为 max ，最小的牌为 min （大小王除外），满足：max - min < 5
// 基本上只要想到这两个地方这道题就迎刃而解了
// 首先声明一个hashSet来判断这副扑克牌是否出现重复，若重复则肯定不是顺子直接返回false
// 若碰到大小王，则可以不考虑继续循环（因为它们可以当作任何牌）
// 接着循环取得最大和最小变量，在结尾处判断最大值减最小值的范围即可。